;-------------------------------------------------------------------------------
; Copyright 1995-1996 KEIL Software, Inc.
; 8051 Processor Declarations
; 从Keil安装文件夹的Keil_v5\C51\ASM\REG51.INC拷贝而来
;-------------------------------------------------------------------------------
$SAVE	; 存储该源文件内的内容到内部栈（stack），和$RESTORE成对使用
$NOLIST	; 编译时该源文件内容不放到listing文件中

;;
; 00H~7FH的地址是R0~R7等通用寄存器地址、位寻址地址和RAM堆栈地址
; 各寄存器含义详见《STC89C52系列单片机器件手册》的PDF

; BYTE Register

;;
; DATA定义地址（寄存器名），和C语言void *, int *等类似，
; 不同的程序员会把8051的寄存器名称都定义成约定俗成的类似的名词
; 立即数以0~9开头，H结尾，所以A~F前要加0
P0      DATA    80H
P1      DATA    90H
P2      DATA    0A0H
P3      DATA    0B0H
PSW     DATA    0D0H
ACC     DATA    0E0H
B       DATA    0F0H
SP      DATA    81H
DPL     DATA    82H
DPH     DATA    83H
PCON    DATA    87H
TCON    DATA    88H		; 定时器控制寄存器，详情见位寻址部分
TMOD    DATA    89H		; 定时器工作模式寄存器，详情见后面注释
TL0     DATA    8AH		; TH1/0 TL1/0位定时器1的16位计数值+分频值
TL1     DATA    8BH
TH0     DATA    8CH
TH1     DATA    8DH
IE      DATA    0A8H	; 中断允许寄存器，详情见位寻址部分
IP      DATA    0B8H	; 中断优先级寄存器，详情见位寻址部分
SCON    DATA    98H
SBUF    DATA    99H

; 上述以0或8结尾的寄存器都可位寻址

;;
; TMOD
; bit7~0: 定时器1的GATE1 C/T1 M11 M01，定时器0的GATE0 C/T0 M10 M00
; GATE1为0时定时器1始终开启，不受TCON寄存器的TR1位控制，
; GATE1为1时只有外部中断1引脚为高，且TCON寄存器的TR1位为1时才使能定时器1
; C/T1为0时从晶振计数的定时器，为1时从T1引脚输入的计数器
; M11M01的值00：13位定时器，TH1 TL1寄存器的低5位作为分频使用
;		  01：TH1 TL1寄存器都用的16位定时器
;		  10：TH1值自动装载到TL1的8位定时器
;		  11：定时器1无效，用给定时器0扩展
; 定时器0的寄存器含义同上，但有个例外如下
; M01M00的值11：定时器0作为双8位定时器

;;
; BIT定义位寻址寄存器，位寻址首地址和原寄存器地址一样，后面的按位加，其值会
; 和别的按字节寻址的地址值重合，但是会访问不一样的地方
; 下面也可以写成 CY BIT PSW.7

; BIT Register
; PSW
CY      BIT     0D7H	
						
						
AC      BIT     0D6H
F0      BIT     0D5H
RS1     BIT     0D4H
RS0     BIT     0D3H
OV      BIT     0D2H
P       BIT     0D0H
; TCON
TF1     BIT     8FH		; 定时器1溢出标志，定时器计时满后置此位，并产生中断，响应中断后硬件清零，也可软件清零
TR1     BIT     8EH		; 定时器1是否允许计数，TMOD.7=0时，1允许0停止；TMOD.7=1时INT1中断1引脚高时，且TR1=1则允许计数，TR1=0停止计数
TF0     BIT     8DH		; 定时器0溢出标志
TR0     BIT     8CH		; 定时器0是否允许计数，定时器0运行控制位
IE1     BIT     8BH		; 外部中断1产生中断
IT1     BIT     8AH		; 0则外部中断1低电平触发，1时下降沿产生中断
IE0     BIT     89H		; 外部中断0产生中断
IT0     BIT     88H		; 0则外部中断0低电平触发，1时下降沿产生中断
; IE 
EA      BIT     0AFH	; 0屏蔽所有中断，开放所有中断（还受后面位的控制）
ES      BIT     0ACH	; 0/1屏蔽允许串口1中断
ET1     BIT     0ABH	; 0/1屏蔽允许定时器1中断
EX1     BIT     0AAH	; 0/1屏蔽允许外部中断1
ET0     BIT     0A9H	; 0/1屏蔽允许定时器0中断
EX0     BIT     0A8H	; 0/1屏蔽允许外部中断0
; IP 
PS      BIT     0BCH	; 串口中断优先级，0低1高
PT1     BIT     0BBH	; 定时器1中断优先级
PX1     BIT     0BAH	; 外部中断1中断优先级
PT0     BIT     0B9H	; 定时器0中断优先级
PX0     BIT     0B8H	; 外部中断0中断优先级
; P3
RD      BIT     0B7H
WR      BIT     0B6H
T1      BIT     0B5H
T0      BIT     0B4H
INT1    BIT     0B3H
INT0    BIT     0B2H
TXD     BIT     0B1H
RXD     BIT     0B0H
; SCON
SM0     BIT     9FH
SM1     BIT     9EH
SM2     BIT     9DH
REN     BIT     9CH
TB8     BIT     9BH
RB8     BIT     9AH
TI      BIT     99H
RI      BIT     98H
$RESTORE	; 和$SAVE成对使用

